package com.xbdun.facade.bmp.service.system;

import java.util.List;

import com.xbdun.common.api.Client;
import com.xbdun.common.api.XbdUnStringResult;
import com.xbdun.common.qr.LoginMacResponse;
import com.xbdun.facade.bmp.request.system.LoginCanPagesRequest;
import com.xbdun.facade.bmp.request.system.ModifyOrgUserRequest;
import com.xbdun.facade.bmp.request.system.ModifyUserPowerRequest;
import com.xbdun.facade.bmp.request.system.OrgUserPagerRequest;
import com.xbdun.facade.bmp.request.system.OrgUserPowerMenuRequest;
import com.xbdun.facade.bmp.request.system.OrgUserRequest;
import com.xbdun.facade.bmp.request.system.QueryOrgUsersRequest;
import com.xbdun.facade.bmp.request.system.UserSpecialPowerRequest;
import com.xbdun.facade.bmp.response.system.QueryOrgUsersResponse;
import com.xbdun.facade.bmp.result.system.OrgUserPagerResult;
import com.xbdun.facade.bmp.result.system.OrgUserPowerMenuResult;
import com.xbdun.facade.bmp.result.system.OrgUserResult;
import com.xbdun.facade.bmp.result.system.QueryOrgUsersPagerResult;

/**
* @ClassName: OrgUserFacade
* @Description: 机构用户表
* @author zhanggt 360730440@qq.com
* @date 2017年4月21日 下午12:03:39
*/
public interface OrgUserFacade {

	/**
	* 新增机构用户
	* @Title: addOrgUser
	* @Description: 新增机构用户
	* @param request	机构用户信息
	* @param client		客户端
	* @return XbdUnStringResult    返回类型
	 */
	public XbdUnStringResult addOrgUser(OrgUserRequest request,Client client);
	
	/**
	* 新增授权给机构用户权限
	* @Title: modifyUserPower
	* @Description: 新增授权给机构用户权限
	* @param request
	* @param client
	* @return    设定文件
	* @return XbdUnStringResult    返回类型
	 */
	public XbdUnStringResult addUserDptRolePower(ModifyUserPowerRequest request,Client client);
	
	/**
	* 删除授权给机构用户权限
	* @Title: modifyUserPower
	* @Description: 删除授权给机构用户权限
	* @param request
	* @param client
	* @return    设定文件
	* @return XbdUnStringResult    返回类型
	 */
	public XbdUnStringResult delUserDptRolePower(ModifyUserPowerRequest request,Client client);
	
	/**
	* 机构用户下的特殊权限新增删除操作
	* @Title: modifyUserSpecialPower
	* @Description: 新增修改用户特殊权限
	* @param request	请求参数
	* @param client		客户端
	* @return XbdUnStringResult    返回类型
	 */
	public XbdUnStringResult modifyUserSpecialPower(UserSpecialPowerRequest request,Client client);
	/**
	* 查询机构下的用户分页
	* @Title: queryOrgUserPager
	* @Description	查询机构下的用户分页
	* @param request	请求对象
	* @return OrgUserPagerResult    返回类型
	 */
	public OrgUserPagerResult queryOrgUserPager(OrgUserPagerRequest request,Client client);
	
	/**
	* 查询用户有效权限,如果userId为空，那么就会默认为Client中的用户Id
	* @Title: queryOrgUserPower
	* @Description: 查询用户有效权限
	* @param userId	用户所在机构下的用户ID
	* @param client	客户端
	* @return OrgUserPowerMenuResult    返回类型
	 */
	public OrgUserPowerMenuResult queryOrgUserPower(OrgUserPowerMenuRequest request,Client client);
	
	
	
	/**
	 * 查询机构用户详情
	 * @Title: getOrgUserInfo
	 * @Description: 查询机构用户详情
	 * @param userId	机构用户id,
	 * @param client		客户端
	 * @return OrgUserResult    返回类型
	 */
	public OrgUserResult getOrgUserInfo(String userId,Client client);

	/**
	 * 修改机构用户信息
	 * @Title: modifyOrgUser
	 * @Description: 修改机构用户信息
	 * @param request	修改机构用户信息请求参数,
	 * @param client		客户端
	 * @return XbdUnStringResult    返回类型
	 */
	public XbdUnStringResult modifyOrgUser(ModifyOrgUserRequest request, Client client);
	
	/**
	 * 删除机构用户信息
	 * @Title: deleteOrgUser
	 * @Description: 修改机构用户信息
	 * @param userId	需要删除的员工id
	 * @param client	客户端
	 * @return XbdUnStringResult 返回类型
	 */
	public XbdUnStringResult deleteOrgUser(String userId, Client client);

	/**
	* @Title: queryOrgUserPager
	* @Description 根据用户编号查询出所属的机构名
	* @param request
	* @return QueryOrgUsersPagerResult    返回类型
	 */
	public QueryOrgUsersPagerResult queryOrgUsersPager(QueryOrgUsersRequest request);

	/**
	* @Title: loginCanPages
	* @Description 用户登录根据用户编号查询可以登录的N种平台
	* @param userCode	用户编号
	* @return List<LoginOrgUserMenuResponse>    返回类型
	 */
	public List<LoginMacResponse> loginCanPages(LoginCanPagesRequest request);

	/**
	* @Title: getUserByOrgUserCode
	* @Description 根据机构编号用户编号查询用户基本信息
	* @param orgCode 机构编号
	* @param userCode	用户编号
	* @return QueryOrgUsersResponse    返回类型
	 */
	public QueryOrgUsersResponse getUserByOrgUserCode(Long orgCode, Long userCode);

	/**
	 * @Title: inviteOrgUser
	 * @Description 修改邀请方式
	 * @param userId
	 * @param inviteType
	 * @param client
	 * @return
	 */
	public XbdUnStringResult inviteOrgUser(String userId, int inviteType, Client client);

	/**
	 * @Title getUserIsWork
	 * @Description 查看用户是否在职
	 * @param orgCode
	 * @param userCode
	 * @return QueryOrgUsersResponse 返回值类型
	 */
	public QueryOrgUsersResponse getUserIsWork(Long orgCode, Long userCode);
}